package com.totoro.mongo.collection;

import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@RestController
public class DemoCollection {

    @Resource
    MongoTemplate mongoTemplate ;

    //一个线程池来筛选重复记录
    private static ExecutorService service = Executors.newFixedThreadPool(1) ;

//    static class ChooseThread implements Callable {
//
//    }


    /**
     * 需求：
     * 删除T_Account表中重复的微信账号。
     *
     * 条件：
     * 账号类型为；weichat， 并且是重复的，并且该账号对应的状态为禁用状态（T_Network）
     *
     * 遇到的问题：
     * 1、表数据非常大，无法直接分组
     * 2、线上数据库，不影响线上服务（避免大量的io操作阻塞数据库的读写。控制好线程执行的速率）
     *
     */
    public void begin(){

    }

    /**
     * 备份集合
     * @param collectionName
     */
    public void backupsCollection(String collectionName, DBObject query, int skip, int limit){
        boolean collectionExists = mongoTemplate.collectionExists(collectionName) ;
        if(!collectionExists)
            throw new IllegalArgumentException("您输入的集合不存在，请验证后再操作！") ;
        String backupsCollection = collectionName+"_temp" ;
        boolean backupsExists = mongoTemplate.collectionExists(backupsCollection) ;
        DBCollection $backupsCollection = null ;
        if(!backupsExists){
            $backupsCollection = mongoTemplate.createCollection(backupsCollection) ;
        }else
            $backupsCollection = mongoTemplate.getCollection(backupsCollection) ;

        if($backupsCollection == null)
            throw new IllegalStateException("备份数据库不存在，备份失败！") ;

        DBCursor cursor = mongoTemplate.getCollection(collectionName).find(query).skip(skip).limit(limit) ;

        while(cursor.hasNext()){
            $backupsCollection.insert(cursor.next()) ;
        }
    }



    public void screen(String collectionName, DBObject query){
        DBCursor cursor = mongoTemplate.getCollection(collectionName).find(query) ;
        if(cursor.hasNext()){//符合条件，将数据插入到mul表

        }else{//不符合条件，不管

        }
    }

    /**
     * 删除重复的账号 根据id来判断，删除要在两个表中都删除（T_Account, T_Account_mul）
     */
    public void deleteAccount(int skip, int limit, String collectionName, String errCollectionName){
        DBCollection $collection = mongoTemplate.getCollection(errCollectionName) ;
        DBCursor cursor = $collection.find().skip(skip).limit(limit) ;
        while (cursor.hasNext()){
            DBObject object = cursor.next() ;

            object.get("_id") ;
            //$collection.remove() ;
        }
    }

    public void end(){
        //结束之前处理-记录当前运行的结果等

        //结束线程
        service.shutdown();
    }
}
